#ifndef BOUNDARY_H
#define BOUNDARY_H

#include "Vec.h"
#include <functional>

using Point2d = Vec<double, 2>;

/**
 * @brief This class represents the boundary condition in BVP
 *        with the form a*U + b*\parU = g.
 * 
 */
struct BoundaryCondition
{
    //a nonzero ,b = 0, Dirichlet condition
    //a = 0 , b nonzero , Neumann condition
    //a,b nonzero, Mixed condition
    double a, b;

    std::function<double(Point2d)> g;

public:
    BoundaryCondition(double a, double b, const std::function<double(Point2d)> &g) : a(a), b(b), g(g) {}
    BoundaryCondition() {}
};

#endif